package com.hsc.lock.annotation;

import com.hsc.lock.interceptor.key.KeyGenerator;
import org.springframework.lang.Nullable;

import java.lang.annotation.*;

@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface ReplayLock {

    /**
     * key
     *
     * @return
     */
    String key() default "";

    /**
     * key的最大生存时间，为负数时，表示无穷大。单位：秒。
     *
     * @return
     */
    int keyTtl() default  -1;

    /**
     * 自定义key生成器{@link KeyGenerator}。
     * 注：属性keyGenerator存在时，属性key将失效。
     *
     * @return
     */
    String keyGenerator() default "";

    /**
     * 目标方法正常退出时是否删除key
     *
     * @return
     */
    boolean removeKeyAfterReturn() default true;

    /**
     * 目标方法抛出异常时是否删除key
     *
     * @return
     */
    boolean removeKeyAfterException() default true;


    /**
     * 不可进入时提示信息
     *
     * @return
     */
    String refuseEnterMessage() default "";

    /**
     * 自定义目标方法不可进入时的处理器。
     * 注：该属性存在时，属性refuseEnterException、refuseEnterMessage将失效。
     *
     * @return
     */
    @Nullable
    String refuseEnterHandler() default "";

    /**
     * 是否可重入
     *
     * @return
     */
    boolean reentrant() default false;


}
